package com.atguigu.gmall.realtime.util;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Date;

public class DateFormatUtil {
    // 只要是用全局工具类，线程安全问题
    // SimpleDateFormat 线程不安全 并发送入数据，内部会线程覆盖
    // 古早工具类 Java 1.1版本
    // public static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");

    // java8推出  没有线程安全问题 放心使用
    private static final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    private static final DateTimeFormatter dtfFull = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    // 日期转ts  给定字符串是否自动时分秒
    public static Long toTs(String dtStr, boolean isFull) {

        LocalDateTime localDateTime = null;
        if (!isFull) {
            dtStr = dtStr + "00:00:00";
        }
        localDateTime = LocalDateTime.parse(dtStr, dtfFull);
        return localDateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli();  // 北京时间是东八区，所以加8
    }

    //  日期转ts    给定字符串是否自动时分秒  默认不完整 没有时分秒
    public static Long toTs(String dtStr) {
        return toTs(dtStr, false);
    }

    // ts转日期
    public static String toDate(Long ts) {
        Date dt = new Date(ts);
        LocalDateTime localDateTime = LocalDateTime.ofInstant(dt.toInstant(), ZoneId.systemDefault());
        return dtf.format(localDateTime);
    }

    // ts转日期+时间
    public static String toYmdHms(Long ts) {
        Date dt = new Date(ts);
        LocalDateTime localDateTime = LocalDateTime.ofInstant(dt.toInstant(), ZoneId.systemDefault());
        return dtfFull.format(localDateTime);
    }

    public static void main(String[] args) {
        System.out.println(toYmdHms(System.currentTimeMillis()));
    }


}
